package databeans;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import beans.*;
import java.sql.SQLException;
import javax.sql.rowset.CachedRowSet;
import java.util.ArrayList;
import com.sun.rowset.CachedRowSetImpl;
import utils.CargarConfiguraciones;
/**
 *
 * @author Carlos
 * @author 3m3r50n
 */
public class EncuestaDataBean {
    private CachedRowSet rowSet;
    private CargarConfiguraciones cc;
    private int pagesize;
    
    //Construir el objeto
    public EncuestaDataBean() throws Exception
    {
        cc = new CargarConfiguraciones();
        Class.forName(cc.getValor("driver"));
        rowSet = new CachedRowSetImpl();
        rowSet.setUrl(cc.getValor("urlbase"));
        rowSet.setUsername(cc.getValor("usuario"));
        rowSet.setPassword(cc.getValor("clave"));
        pagesize = Integer.parseInt(cc.getValor("paginacion"));
        
        
    }

   
    
    //Devolver una lista de encuestaBeans
    public ArrayList< EncuestaBean > getListaEncuestas() throws SQLException
    {
        //Obtener lista de titulos
        rowSet.setCommand(
                " select " +
                " idencuesta, " +
                " descripcionencuesta, " +
                " fechaencuesta, " +
                " activa, " +
                " maxrespuestas, " +
                " vencimientoencuesta, " +
                " codmateria " +
                " from " +
                " encuesta " +
                " order by " +
                " fechaencuesta desc ," +
                " vencimientoencuesta asc ");
        
        rowSet.execute();


        ArrayList< EncuestaBean > listaEncuestas = new ArrayList< EncuestaBean >();
        rowSet.beforeFirst();

        //Obtener los datos
        while(rowSet.next())
        {
            EncuestaBean encuesta = new EncuestaBean();
            encuesta.setIdEncuesta(rowSet.getString(1));
            encuesta.setDescripcionEncuesta(rowSet.getString(2));
            encuesta.setFechaEncuesta(rowSet.getDate(3));
            encuesta.setActiva(rowSet.getString(4).charAt(0));
            encuesta.setMaxRespuestas(rowSet.getInt(5));
            encuesta.setFechaVencimiento(rowSet.getDate(6));
            encuesta.setMateria(rowSet.getString(7));

            listaEncuestas.add(encuesta);
        }

        return listaEncuestas;
    }

        public ArrayList< EncuestaBean > getListaEncuestas(int pag) throws SQLException
    {
        //Obtener lista de titulos
        rowSet.setCommand(
                " select " +
                " idencuesta, " +
                " descripcionencuesta, " +
                " fechaencuesta, " +
                " activa, " +
                " maxrespuestas, " +
                " vencimientoencuesta, " +
                " codmateria " +
                " from " +
                " encuesta " +
                " order by " +
                " fechaencuesta desc ," +
                " vencimientoencuesta asc " +
                " limit " + pagesize*pag + ", " + pagesize);

        rowSet.execute();


        ArrayList< EncuestaBean > listaEncuestas = new ArrayList< EncuestaBean >();
        rowSet.beforeFirst();

        //Obtener los datos
        while(rowSet.next())
        {
            EncuestaBean encuesta = new EncuestaBean();
            encuesta.setIdEncuesta(rowSet.getString(1));
            encuesta.setDescripcionEncuesta(rowSet.getString(2));
            encuesta.setFechaEncuesta(rowSet.getDate(3));
            encuesta.setActiva(rowSet.getString(4).charAt(0));
            encuesta.setMaxRespuestas(rowSet.getInt(5));
            encuesta.setFechaVencimiento(rowSet.getDate(6));
            encuesta.setMateria(rowSet.getString(7));

            listaEncuestas.add(encuesta);
        }

        return listaEncuestas;
    }

    public ArrayList< EncuestaBean > getListaEncuestasActivas() throws SQLException
    {
        //Obtener lista de titulos
        rowSet.setCommand(
                "select idencuesta, " +
                "descripcionencuesta, " +
                "fechaencuesta, " +
                "activa " +
                " from " +
                " encuesta " +
                " where " +
                " activa = 1 " +
                " order by " +
                " fechaencuesta desc, " +
                " vencimientoencuesta asc ");

        rowSet.execute();


        ArrayList< EncuestaBean > listaEncuestas = new ArrayList< EncuestaBean >();
        rowSet.beforeFirst();

        //Obtener los datos
        while(rowSet.next())
        {
            EncuestaBean encuesta = new EncuestaBean();
            encuesta.setIdEncuesta(rowSet.getString(1));
            encuesta.setDescripcionEncuesta(rowSet.getString(2));
            encuesta.setFechaEncuesta(rowSet.getDate(3));

            encuesta.setActiva(rowSet.getString(4).charAt(0));

            listaEncuestas.add(encuesta);
        }

        return listaEncuestas;
    }

    public int getConteoEncuestas() throws SQLException{
        String sql = "SELECT COUNT(*) FROM encuesta";
        rowSet.setCommand(sql);
        rowSet.execute();
        rowSet.beforeFirst();
        rowSet.next();
        return rowSet.getInt(1);
    }

    public int getConteoEncuestasActivas(String carnet) throws SQLException{
        String sql = "SELECT COUNT(*) " +
                "from encuesta e left join alumno_materia am using (codmateria) " +
                "where e.activa = '1' and (e.codmateria is null or am.carnet = '"+carnet+"')";
        rowSet.setCommand(sql);
        rowSet.execute();
        rowSet.beforeFirst();
        rowSet.next();
        return rowSet.getInt(1);
    }

    public ArrayList< EncuestaBean > getListaEncuestasActivas(String carnet) throws SQLException
    {
        //Obtener lista de titulos
        rowSet.setCommand(
                "select e.idencuesta, e.descripcionencuesta, e.vencimientoencuesta, e.codmateria, e.activa, e.maxrespuestas " +
                "from encuesta e left join alumno_materia am using (codmateria) " +
                "where e.activa = '1' and (e.codmateria is null or am.carnet = '"+carnet+"')");
        System.out.println(rowSet.getCommand());
        rowSet.execute();
        ArrayList< EncuestaBean > listaEncuestas = new ArrayList< EncuestaBean >();
        rowSet.beforeFirst();
        //Obtener los datos
        while(rowSet.next())
        {
            EncuestaBean encuesta = new EncuestaBean();
            encuesta.setIdEncuesta(rowSet.getString(1));
            encuesta.setDescripcionEncuesta(rowSet.getString(2));
            encuesta.setFechaEncuesta(rowSet.getDate(3));
            encuesta.setMateria(rowSet.getString(4));
            encuesta.setActiva(rowSet.getString(5).charAt(0));

            listaEncuestas.add(encuesta);
        }
        return listaEncuestas;
    }

    public ArrayList< EncuestaBean > getListaEncuestasActivas(String carnet, int pag) throws SQLException
    {
        //Obtener lista de titulos
        rowSet.setCommand(
                "select e.idencuesta, e.descripcionencuesta, e.vencimientoencuesta, e.codmateria, e.activa, e.maxrespuestas " +
                "from encuesta e left join alumno_materia am using (codmateria) " +
                "where e.activa = '1' and (e.codmateria is null or am.carnet = '"+carnet+"') " +
                "limit " + pagesize*pag + ", " + pagesize);
        System.out.println(rowSet.getCommand());
        rowSet.execute();
        ArrayList< EncuestaBean > listaEncuestas = new ArrayList< EncuestaBean >();
        rowSet.beforeFirst();
        //Obtener los datos
        while(rowSet.next())
        {
            EncuestaBean encuesta = new EncuestaBean();
            encuesta.setIdEncuesta(rowSet.getString(1));
            encuesta.setDescripcionEncuesta(rowSet.getString(2));
            encuesta.setFechaEncuesta(rowSet.getDate(3));
            encuesta.setMateria(rowSet.getString(4));
            encuesta.setActiva(rowSet.getString(5).charAt(0));

            listaEncuestas.add(encuesta);
        }
        return listaEncuestas;
    }

    public ArrayList< EncuestaBean > getListaTopEncuestas() throws SQLException
    {
        String sql= " select " +
                " e.idencuesta, " +
                " e.descripcionencuesta, " +
                " e.fechaencuesta, " +
                " e.activa " +
                " from " +
                " encuesta e " +
                " join detalleencuesta d using(idencuesta)" +
                " where " +
                " e.activa = 1 " +
                " group by " +
                " e.idencuesta " +
                " order by " +
                " max(d.fechavoto) " +
                " desc " +
                " limit 5 ";

        rowSet.setCommand(sql);
        rowSet.execute();
        ArrayList< EncuestaBean > listaEncuestas = new ArrayList< EncuestaBean >();
        rowSet.beforeFirst();
        while(rowSet.next())
        {
            EncuestaBean encuesta = new EncuestaBean();
            encuesta.setIdEncuesta(rowSet.getString(1));
            encuesta.setDescripcionEncuesta(rowSet.getString(2));
            encuesta.setFechaEncuesta(rowSet.getDate(3));
           
            encuesta.setActiva(rowSet.getString(4).charAt(0));

            listaEncuestas.add(encuesta);
        }

        return listaEncuestas;
    }


    public EncuestaBean getEncuesta(String id)
    {
        EncuestaBean encuesta = new EncuestaBean();
        try{
             rowSet.setCommand(
                    "select " +
                    "idencuesta, " +
                    "descripcionencuesta, " +
                    "fechaencuesta, " +
                    "vencimientoencuesta, " +
                    "codmateria, " +
                    "maxrespuestas, " +
                    "activa from encuesta " +
                    "where idencuesta='" +
                    id+"'");

            rowSet.execute();
            rowSet.beforeFirst();
            rowSet.next();

            encuesta.setIdEncuesta(rowSet.getString(1));
            encuesta.setDescripcionEncuesta(rowSet.getString(2));
            encuesta.setFechaEncuesta(rowSet.getDate(3));
            encuesta.setFechaVencimiento(rowSet.getDate(4));
            encuesta.setMateria(rowSet.getString(5));
            encuesta.setMaxRespuestas(rowSet.getInt(6));
            encuesta.setActiva(rowSet.getString(7).charAt(0));


        }catch(SQLException e)
        {
            e.printStackTrace();
        }
        return encuesta;
    }

    public void setEncuesta(EncuestaBean encuesta)throws SQLException{
       String sql= "INSERT INTO carnet.encuesta (" +
                "idencuesta, " +
                "descripcionencuesta, " +
                "activa, " +
                "maxrespuestas, " +
                "fechaencuesta, " +
                "vencimientoencuesta";
                if(encuesta.getMateria()!= null)
                    sql = sql + ", codmateria";
                sql = sql +")";
	sql = sql + " VALUES (" +
                "'" + encuesta.getIdEncuesta()+ "',"+
                "'" + encuesta.getDescripcionEncuesta().trim()+ "', " +
                "'" + encuesta.getActiva() + "', " +
                "'" + encuesta.getMaxRespuestas() + "', " +
                "'" + encuesta.getFechaEncuesta() + "', " +
                "'" + encuesta.getFechaVencimiento() + "'";
                if(encuesta.getMateria() != null)
                    sql = sql + ", '" + encuesta.getMateria() + "'";
        sql = sql + ")";

        System.out.println(sql);

        rowSet.setCommand(sql);
      
        rowSet.execute();
     


    }

    public boolean existeCodigo(String codigo) throws SQLException{
        rowSet.setCommand("SELECT COUNT(*) FROM encuesta WHERE idencuesta='"+codigo+"'");
        rowSet.execute();
        rowSet.beforeFirst();
        rowSet.next();
        return (rowSet.getInt(1) > 0);
    }

}
